package com.luzyluis.medicalcalendar.controlador;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.luzyluis.medicalcalendar.R;
import com.luzyluis.medicalcalendar.clases.Medicamento;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;


public class MedicamentosDB extends SQLiteOpenHelper {

    String cadSql = "CREATE TABLE medicamentos ("
            + "codigo VARCHAR(10), generico VARCHAR(256), "
            + "id INTEGER PRIMARY KEY, nombre VARCHAR(256));";
    SQLiteDatabase db;
    Context context;


    public MedicamentosDB(Context contexto, String nombre,
                          SQLiteDatabase.CursorFactory factory, int version) {
        super(contexto, nombre, factory, version);
        this.context = contexto;
    }

    /**
     * Método de SQLiteOpenHelper Método que se ejecuta para crear la bbdd
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(cadSql);

        String linea = "";

        try
        {
            InputStream fraw =
                    context.getResources().openRawResource(R.raw.dbmedicamentos);

            BufferedReader brin =
                    new BufferedReader(new InputStreamReader(fraw));
            do {
                linea = brin.readLine();
                if (linea != null)
                    db.execSQL(linea);
            } while(linea != null);
            fraw.close();

            Log.i("Ficheros", "Fichero RAW leido!");
        }
        catch (Exception ex)
        {
            Log.e("Ficheros", "Error al leer fichero desde recurso raw " + ex.getMessage() + " " + linea);
        }
    }

    /**
     * Método de SQLiteOpenHelper Método que se ejecuta cuando hay nuevas
     * versiones
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }

    /**
     * Método que devuelve un arraylist de Medicamentos según una búsqueda en la BD
     *
     * @param dato
     * @return
     */
    public ArrayList<Medicamento> consultarTratamiento(String dato) {
        ArrayList<Medicamento> ListaMedicamentos = new ArrayList<>();
        String sql = "SELECT * FROM medicamentos WHERE codigo = " + dato + " OR nombre like %" + dato + "%";

        Cursor resultado = db.rawQuery(sql, null);

        if (resultado.moveToFirst()) {
            do {
                Medicamento auxMed = new Medicamento();
                auxMed.setCodigo(resultado.getString(0));
                auxMed.setGenerico(resultado.getString(1));
                auxMed.setId(Integer.parseInt(resultado.getString(2)));
                auxMed.setNombre(resultado.getString(3));

                ListaMedicamentos.add(auxMed);
            } while (resultado.moveToNext());
        }
        return ListaMedicamentos;
    }

}

